//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension IoTWireless {
    // MARK: Enums

    public enum ExpressionType: String, CustomStringConvertible, Codable {
        case mqtttopic = "MqttTopic"
        case rulename = "RuleName"
        public var description: String { return self.rawValue }
    }

    public enum PartnerType: String, CustomStringConvertible, Codable {
        case sidewalk = "Sidewalk"
        public var description: String { return self.rawValue }
    }

    public enum WirelessDeviceIdType: String, CustomStringConvertible, Codable {
        case deveui = "DevEui"
        case thingname = "ThingName"
        case wirelessdeviceid = "WirelessDeviceId"
        public var description: String { return self.rawValue }
    }

    public enum WirelessDeviceType: String, CustomStringConvertible, Codable {
        case lorawan = "LoRaWAN"
        case sidewalk = "Sidewalk"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayIdType: String, CustomStringConvertible, Codable {
        case gatewayeui = "GatewayEui"
        case thingname = "ThingName"
        case wirelessgatewayid = "WirelessGatewayId"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayServiceType: String, CustomStringConvertible, Codable {
        case cups = "CUPS"
        case lns = "LNS"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayTaskDefinitionType: String, CustomStringConvertible, Codable {
        case update = "UPDATE"
        public var description: String { return self.rawValue }
    }

    public enum WirelessGatewayTaskStatus: String, CustomStringConvertible, Codable {
        case completed = "COMPLETED"
        case failed = "FAILED"
        case firstRetry = "FIRST_RETRY"
        case inProgress = "IN_PROGRESS"
        case pending = "PENDING"
        case secondRetry = "SECOND_RETRY"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AbpV10X: AWSEncodableShape & AWSDecodableShape {
        /// The DevAddr value.
        public let devAddr: String?
        /// Session keys for ABP v1.0.x
        public let sessionKeys: SessionKeysAbpV10X?

        public init(devAddr: String? = nil, sessionKeys: SessionKeysAbpV10X? = nil) {
            self.devAddr = devAddr
            self.sessionKeys = sessionKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.devAddr, name: "devAddr", parent: name, pattern: "[a-fA-F0-9]{8}")
            try self.sessionKeys?.validate(name: "\(name).sessionKeys")
        }

        private enum CodingKeys: String, CodingKey {
            case devAddr = "DevAddr"
            case sessionKeys = "SessionKeys"
        }
    }

    public struct AbpV11: AWSEncodableShape & AWSDecodableShape {
        /// The DevAddr value.
        public let devAddr: String?
        /// Session keys for ABP v1.1
        public let sessionKeys: SessionKeysAbpV11?

        public init(devAddr: String? = nil, sessionKeys: SessionKeysAbpV11? = nil) {
            self.devAddr = devAddr
            self.sessionKeys = sessionKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.devAddr, name: "devAddr", parent: name, pattern: "[a-fA-F0-9]{8}")
            try self.sessionKeys?.validate(name: "\(name).sessionKeys")
        }

        private enum CodingKeys: String, CodingKey {
            case devAddr = "DevAddr"
            case sessionKeys = "SessionKeys"
        }
    }

    public struct AssociateAwsAccountWithPartnerAccountRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkAccountInfo

        public init(clientRequestToken: String? = AssociateAwsAccountWithPartnerAccountRequest.idempotencyToken(), sidewalk: SidewalkAccountInfo) {
            self.clientRequestToken = clientRequestToken
            self.sidewalk = sidewalk
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.sidewalk.validate(name: "\(name).sidewalk")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case sidewalk = "Sidewalk"
        }
    }

    public struct AssociateAwsAccountWithPartnerAccountResponse: AWSDecodableShape {
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkAccountInfo?

        public init(sidewalk: SidewalkAccountInfo? = nil) {
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
        }
    }

    public struct AssociateWirelessDeviceWithThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ARN of the thing to associate with the wireless device.
        public let thingArn: String

        public init(id: String, thingArn: String) {
            self.id = id
            self.thingArn = thingArn
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case thingArn = "ThingArn"
        }
    }

    public struct AssociateWirelessDeviceWithThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociateWirelessGatewayWithCertificateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ID of the certificate to associate with the wireless gateway.
        public let iotCertificateId: String

        public init(id: String, iotCertificateId: String) {
            self.id = id
            self.iotCertificateId = iotCertificateId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.iotCertificateId, name: "iotCertificateId", parent: name, max: 4096)
            try self.validate(self.iotCertificateId, name: "iotCertificateId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case iotCertificateId = "IotCertificateId"
        }
    }

    public struct AssociateWirelessGatewayWithCertificateResponse: AWSDecodableShape {
        /// The ID of the certificate associated with the wireless gateway.
        public let iotCertificateId: String?

        public init(iotCertificateId: String? = nil) {
            self.iotCertificateId = iotCertificateId
        }

        private enum CodingKeys: String, CodingKey {
            case iotCertificateId = "IotCertificateId"
        }
    }

    public struct AssociateWirelessGatewayWithThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ARN of the thing to associate with the wireless gateway.
        public let thingArn: String

        public init(id: String, thingArn: String) {
            self.id = id
            self.thingArn = thingArn
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case thingArn = "ThingArn"
        }
    }

    public struct AssociateWirelessGatewayWithThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct CreateDestinationRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the new resource.
        public let description: String?
        /// The rule name or topic rule to send messages to.
        public let expression: String
        /// The type of value in Expression.
        public let expressionType: ExpressionType
        /// The name of the new resource.
        public let name: String
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String
        /// The tags to attach to the new destination. Tags are metadata that can be used to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateDestinationRequest.idempotencyToken(), description: String? = nil, expression: String, expressionType: ExpressionType, name: String, roleArn: String, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.expression, name: "expression", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "[a-zA-Z0-9-_]+")
            try self.validate(self.roleArn, name: "roleArn", parent: name, max: 2048)
            try self.validate(self.roleArn, name: "roleArn", parent: name, min: 20)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.tags, name: "tags", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case name = "Name"
            case roleArn = "RoleArn"
            case tags = "Tags"
        }
    }

    public struct CreateDestinationResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The name of the new resource.
        public let name: String?

        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case name = "Name"
        }
    }

    public struct CreateDeviceProfileRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The device profile information to use to create the device profile.
        public let loRaWAN: LoRaWANDeviceProfile?
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the new device profile Tags are metadata that can be used to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateDeviceProfileRequest.idempotencyToken(), loRaWAN: LoRaWANDeviceProfile? = nil, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.tags, name: "tags", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateDeviceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new device profile.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateServiceProfileRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The service profile information to use to create the service profile.
        public let loRaWAN: LoRaWANServiceProfile?
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the new service profile. Tags are metadata that can be used to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateServiceProfileRequest.idempotencyToken(), loRaWAN: LoRaWANServiceProfile? = nil, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.tags, name: "tags", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateServiceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new service profile.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessDeviceRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the new resource.
        public let description: String?
        /// The name of the destination to assign to the new wireless device.
        public let destinationName: String
        /// The device configuration information to use to create the wireless device.
        public let loRaWAN: LoRaWANDevice?
        /// The name of the new resource.
        public let name: String?
        /// The wireless device type.
        public let type: WirelessDeviceType

        public init(clientRequestToken: String? = CreateWirelessDeviceRequest.idempotencyToken(), description: String? = nil, destinationName: String, loRaWAN: LoRaWANDevice? = nil, name: String? = nil, type: WirelessDeviceType) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.destinationName = destinationName
            self.loRaWAN = loRaWAN
            self.name = name
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "[a-zA-Z0-9-_]+")
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case destinationName = "DestinationName"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case type = "Type"
        }
    }

    public struct CreateWirelessDeviceResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new wireless device.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessGatewayRequest: AWSEncodableShape {
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The description of the new resource.
        public let description: String?
        /// The gateway configuration information to use to create the wireless gateway.
        public let loRaWAN: LoRaWANGateway
        /// The name of the new resource.
        public let name: String?
        /// The tags to attach to the new wireless gateway. Tags are metadata that can be used to manage a resource.
        public let tags: [Tag]?

        public init(clientRequestToken: String? = CreateWirelessGatewayRequest.idempotencyToken(), description: String? = nil, loRaWAN: LoRaWANGateway, name: String? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.loRaWAN = loRaWAN
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.loRaWAN.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.tags, name: "tags", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateWirelessGatewayResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the new resource.
        public let arn: String?
        /// The ID of the new wireless gateway.
        public let id: String?

        public init(arn: String? = nil, id: String? = nil) {
            self.arn = arn
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
        }
    }

    public struct CreateWirelessGatewayTaskDefinitionRequest: AWSEncodableShape {
        /// Whether to automatically create tasks using this task definition for all gateways with the specified current version. If false, the task must me created by calling CreateWirelessGatewayTask.
        public let autoCreateTasks: Bool
        /// Each resource must have a unique client request token. If you try to create a new resource with the same token as a resource that already exists, an exception occurs. If you omit this value, AWS SDKs will automatically generate a unique client request.
        public let clientRequestToken: String?
        /// The name of the new resource.
        public let name: String?
        /// Information about the gateways to update.
        public let update: UpdateWirelessGatewayTaskCreate?

        public init(autoCreateTasks: Bool, clientRequestToken: String? = CreateWirelessGatewayTaskDefinitionRequest.idempotencyToken(), name: String? = nil, update: UpdateWirelessGatewayTaskCreate? = nil) {
            self.autoCreateTasks = autoCreateTasks
            self.clientRequestToken = clientRequestToken
            self.name = name
            self.update = update
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "^[a-zA-Z0-9-_]+$")
            try self.validate(self.name, name: "name", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.update?.validate(name: "\(name).update")
        }

        private enum CodingKeys: String, CodingKey {
            case autoCreateTasks = "AutoCreateTasks"
            case clientRequestToken = "ClientRequestToken"
            case name = "Name"
            case update = "Update"
        }
    }

    public struct CreateWirelessGatewayTaskDefinitionResponse: AWSDecodableShape {
        /// The ID of the new wireless gateway task definition.
        public let id: String?

        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id = "Id"
        }
    }

    public struct CreateWirelessGatewayTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String
        /// The ID of the WirelessGatewayTaskDefinition.
        public let wirelessGatewayTaskDefinitionId: String

        public init(id: String, wirelessGatewayTaskDefinitionId: String) {
            self.id = id
            self.wirelessGatewayTaskDefinitionId = wirelessGatewayTaskDefinitionId
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.wirelessGatewayTaskDefinitionId, name: "wirelessGatewayTaskDefinitionId", parent: name, max: 36)
            try self.validate(self.wirelessGatewayTaskDefinitionId, name: "wirelessGatewayTaskDefinitionId", parent: name, pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: String, CodingKey {
            case wirelessGatewayTaskDefinitionId = "WirelessGatewayTaskDefinitionId"
        }
    }

    public struct CreateWirelessGatewayTaskResponse: AWSDecodableShape {
        /// The status of the request.
        public let status: WirelessGatewayTaskStatus?
        /// The ID of the WirelessGatewayTaskDefinition.
        public let wirelessGatewayTaskDefinitionId: String?

        public init(status: WirelessGatewayTaskStatus? = nil, wirelessGatewayTaskDefinitionId: String? = nil) {
            self.status = status
            self.wirelessGatewayTaskDefinitionId = wirelessGatewayTaskDefinitionId
        }

        private enum CodingKeys: String, CodingKey {
            case status = "Status"
            case wirelessGatewayTaskDefinitionId = "WirelessGatewayTaskDefinitionId"
        }
    }

    public struct DeleteDestinationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "name", location: .uri(locationName: "Name"))
        ]

        /// The name of the resource to delete.
        public let name: String

        public init(name: String) {
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "[a-zA-Z0-9-_]+")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDestinationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteDeviceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDeviceProfileResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteServiceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteServiceProfileResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessGatewayResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessGatewayTaskDefinitionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessGatewayTaskDefinitionResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWirelessGatewayTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to delete.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWirelessGatewayTaskResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Destinations: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The rule name or topic rule to send messages to.
        public let expression: String?
        /// The type of value in Expression.
        public let expressionType: ExpressionType?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String?

        public init(arn: String? = nil, description: String? = nil, expression: String? = nil, expressionType: ExpressionType? = nil, name: String? = nil, roleArn: String? = nil) {
            self.arn = arn
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case name = "Name"
            case roleArn = "RoleArn"
        }
    }

    public struct DeviceProfile: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the device profile.
        public let id: String?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
        }
    }

    public struct DisassociateAwsAccountFromPartnerAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "partnerAccountId", location: .uri(locationName: "PartnerAccountId")),
            AWSMemberEncoding(label: "partnerType", location: .querystring(locationName: "partnerType"))
        ]

        /// The partner account ID to disassociate from the AWS account.
        public let partnerAccountId: String
        /// The partner type.
        public let partnerType: PartnerType

        public init(partnerAccountId: String, partnerType: PartnerType) {
            self.partnerAccountId = partnerAccountId
            self.partnerType = partnerType
        }

        public func validate(name: String) throws {
            try self.validate(self.partnerAccountId, name: "partnerAccountId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateAwsAccountFromPartnerAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessDeviceFromThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessDeviceFromThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessGatewayFromCertificateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessGatewayFromCertificateResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWirelessGatewayFromThingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to update.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateWirelessGatewayFromThingResponse: AWSDecodableShape {
        public init() {}
    }

    public struct GetDestinationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "name", location: .uri(locationName: "Name"))
        ]

        /// The name of the resource to get.
        public let name: String

        public init(name: String) {
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "[a-zA-Z0-9-_]+")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDestinationResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The rule name or topic rule to send messages to.
        public let expression: String?
        /// The type of value in Expression.
        public let expressionType: ExpressionType?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String?

        public init(arn: String? = nil, description: String? = nil, expression: String? = nil, expressionType: ExpressionType? = nil, name: String? = nil, roleArn: String? = nil) {
            self.arn = arn
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case name = "Name"
            case roleArn = "RoleArn"
        }
    }

    public struct GetDeviceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDeviceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the device profile.
        public let id: String?
        /// Information about the device profile.
        public let loRaWAN: LoRaWANDeviceProfile?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, loRaWAN: LoRaWANDeviceProfile? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct GetPartnerAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "partnerAccountId", location: .uri(locationName: "PartnerAccountId")),
            AWSMemberEncoding(label: "partnerType", location: .querystring(locationName: "partnerType"))
        ]

        /// The partner account ID to disassociate from the AWS account.
        public let partnerAccountId: String
        /// The partner type.
        public let partnerType: PartnerType

        public init(partnerAccountId: String, partnerType: PartnerType) {
            self.partnerAccountId = partnerAccountId
            self.partnerType = partnerType
        }

        public func validate(name: String) throws {
            try self.validate(self.partnerAccountId, name: "partnerAccountId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPartnerAccountResponse: AWSDecodableShape {
        /// Whether the partner account is linked to the AWS account.
        public let accountLinked: Bool?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkAccountInfoWithFingerprint?

        public init(accountLinked: Bool? = nil, sidewalk: SidewalkAccountInfoWithFingerprint? = nil) {
            self.accountLinked = accountLinked
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case accountLinked = "AccountLinked"
            case sidewalk = "Sidewalk"
        }
    }

    public struct GetServiceEndpointRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "serviceType", location: .querystring(locationName: "serviceType"))
        ]

        /// The service type for which to get endpoint information about. Can be CUPS for the Configuration and Update Server endpoint, or LNS for the LoRaWAN Network Server endpoint.
        public let serviceType: WirelessGatewayServiceType?

        public init(serviceType: WirelessGatewayServiceType? = nil) {
            self.serviceType = serviceType
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetServiceEndpointResponse: AWSDecodableShape {
        /// The Root CA of the server trust certificate.
        public let serverTrust: String?
        /// The service endpoint value.
        public let serviceEndpoint: String?
        /// The endpoint's service type.
        public let serviceType: WirelessGatewayServiceType?

        public init(serverTrust: String? = nil, serviceEndpoint: String? = nil, serviceType: WirelessGatewayServiceType? = nil) {
            self.serverTrust = serverTrust
            self.serviceEndpoint = serviceEndpoint
            self.serviceType = serviceType
        }

        private enum CodingKeys: String, CodingKey {
            case serverTrust = "ServerTrust"
            case serviceEndpoint = "ServiceEndpoint"
            case serviceType = "ServiceType"
        }
    }

    public struct GetServiceProfileRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetServiceProfileResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the service profile.
        public let id: String?
        /// Information about the service profile.
        public let loRaWAN: LoRaWANGetServiceProfileInfo?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, loRaWAN: LoRaWANGetServiceProfileInfo? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct GetWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "identifier", location: .uri(locationName: "Identifier")),
            AWSMemberEncoding(label: "identifierType", location: .querystring(locationName: "identifierType"))
        ]

        /// The identifier of the wireless device to get.
        public let identifier: String
        /// The type of identifier used in identifier.
        public let identifierType: WirelessDeviceIdType

        public init(identifier: String, identifierType: WirelessDeviceIdType) {
            self.identifier = identifier
            self.identifierType = identifierType
        }

        public func validate(name: String) throws {
            try self.validate(self.identifier, name: "identifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessDeviceResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The name of the destination to which the device is assigned.
        public let destinationName: String?
        /// The ID of the wireless device.
        public let id: String?
        /// Information about the wireless device.
        public let loRaWAN: LoRaWANDevice?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the thing associated with the wireless device.
        public let thingArn: String?
        /// The name of the thing associated with the wireless device. The value is empty if a thing isn't associated with the device.
        public let thingName: String?
        /// The wireless device type.
        public let type: WirelessDeviceType?

        public init(arn: String? = nil, description: String? = nil, destinationName: String? = nil, id: String? = nil, loRaWAN: LoRaWANDevice? = nil, name: String? = nil, thingArn: String? = nil, thingName: String? = nil, type: WirelessDeviceType? = nil) {
            self.arn = arn
            self.description = description
            self.destinationName = destinationName
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.thingArn = thingArn
            self.thingName = thingName
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case destinationName = "DestinationName"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case thingArn = "ThingArn"
            case thingName = "ThingName"
            case type = "Type"
        }
    }

    public struct GetWirelessDeviceStatisticsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "wirelessDeviceId", location: .uri(locationName: "Id"))
        ]

        /// The ID of the wireless device for which to get the data.
        public let wirelessDeviceId: String

        public init(wirelessDeviceId: String) {
            self.wirelessDeviceId = wirelessDeviceId
        }

        public func validate(name: String) throws {
            try self.validate(self.wirelessDeviceId, name: "wirelessDeviceId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessDeviceStatisticsResponse: AWSDecodableShape {
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// Information about the wireless device's operations.
        public let loRaWAN: LoRaWANDeviceMetadata?
        /// The ID of the wireless device.
        public let wirelessDeviceId: String?

        public init(lastUplinkReceivedAt: String? = nil, loRaWAN: LoRaWANDeviceMetadata? = nil, wirelessDeviceId: String? = nil) {
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.loRaWAN = loRaWAN
            self.wirelessDeviceId = wirelessDeviceId
        }

        private enum CodingKeys: String, CodingKey {
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case loRaWAN = "LoRaWAN"
            case wirelessDeviceId = "WirelessDeviceId"
        }
    }

    public struct GetWirelessGatewayCertificateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayCertificateResponse: AWSDecodableShape {
        /// The ID of the certificate associated with the wireless gateway.
        public let iotCertificateId: String?
        /// The ID of the certificate associated with the wireless gateway and used for LoRaWANNetworkServer endpoint.
        public let loRaWANNetworkServerCertificateId: String?

        public init(iotCertificateId: String? = nil, loRaWANNetworkServerCertificateId: String? = nil) {
            self.iotCertificateId = iotCertificateId
            self.loRaWANNetworkServerCertificateId = loRaWANNetworkServerCertificateId
        }

        private enum CodingKeys: String, CodingKey {
            case iotCertificateId = "IotCertificateId"
            case loRaWANNetworkServerCertificateId = "LoRaWANNetworkServerCertificateId"
        }
    }

    public struct GetWirelessGatewayFirmwareInformationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayFirmwareInformationResponse: AWSDecodableShape {
        /// Information about the wireless gateway's firmware.
        public let loRaWAN: LoRaWANGatewayCurrentVersion?

        public init(loRaWAN: LoRaWANGatewayCurrentVersion? = nil) {
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct GetWirelessGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "identifier", location: .uri(locationName: "Identifier")),
            AWSMemberEncoding(label: "identifierType", location: .querystring(locationName: "identifierType"))
        ]

        /// The identifier of the wireless gateway to get.
        public let identifier: String
        /// The type of identifier used in identifier.
        public let identifierType: WirelessGatewayIdType

        public init(identifier: String, identifierType: WirelessGatewayIdType) {
            self.identifier = identifier
            self.identifierType = identifierType
        }

        public func validate(name: String) throws {
            try self.validate(self.identifier, name: "identifier", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayResponse: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The ID of the wireless gateway.
        public let id: String?
        /// Information about the wireless gateway.
        public let loRaWAN: LoRaWANGateway?
        /// The name of the resource.
        public let name: String?
        /// The ARN of the thing associated with the wireless gateway.
        public let thingArn: String?
        /// The name of the thing associated with the wireless gateway. The value is empty if a thing isn't associated with the gateway.
        public let thingName: String?

        public init(arn: String? = nil, description: String? = nil, id: String? = nil, loRaWAN: LoRaWANGateway? = nil, name: String? = nil, thingArn: String? = nil, thingName: String? = nil) {
            self.arn = arn
            self.description = description
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
            self.thingArn = thingArn
            self.thingName = thingName
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case id = "Id"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case thingArn = "ThingArn"
            case thingName = "ThingName"
        }
    }

    public struct GetWirelessGatewayStatisticsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "wirelessGatewayId", location: .uri(locationName: "Id"))
        ]

        /// The ID of the wireless gateway for which to get the data.
        public let wirelessGatewayId: String

        public init(wirelessGatewayId: String) {
            self.wirelessGatewayId = wirelessGatewayId
        }

        public func validate(name: String) throws {
            try self.validate(self.wirelessGatewayId, name: "wirelessGatewayId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayStatisticsResponse: AWSDecodableShape {
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// The ID of the wireless gateway.
        public let wirelessGatewayId: String?

        public init(lastUplinkReceivedAt: String? = nil, wirelessGatewayId: String? = nil) {
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.wirelessGatewayId = wirelessGatewayId
        }

        private enum CodingKeys: String, CodingKey {
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case wirelessGatewayId = "WirelessGatewayId"
        }
    }

    public struct GetWirelessGatewayTaskDefinitionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 36)
            try self.validate(self.id, name: "id", parent: name, pattern: "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayTaskDefinitionResponse: AWSDecodableShape {
        /// Whether to automatically create tasks using this task definition for all gateways with the specified current version. If false, the task must me created by calling CreateWirelessGatewayTask.
        public let autoCreateTasks: Bool?
        /// The name of the resource.
        public let name: String?
        /// Information about the gateways to update.
        public let update: UpdateWirelessGatewayTaskCreate?

        public init(autoCreateTasks: Bool? = nil, name: String? = nil, update: UpdateWirelessGatewayTaskCreate? = nil) {
            self.autoCreateTasks = autoCreateTasks
            self.name = name
            self.update = update
        }

        private enum CodingKeys: String, CodingKey {
            case autoCreateTasks = "AutoCreateTasks"
            case name = "Name"
            case update = "Update"
        }
    }

    public struct GetWirelessGatewayTaskRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the resource to get.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWirelessGatewayTaskResponse: AWSDecodableShape {
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// The status of the request.
        public let status: WirelessGatewayTaskStatus?
        /// The date and time when the task was created.
        public let taskCreatedAt: String?
        /// The ID of the wireless gateway.
        public let wirelessGatewayId: String?
        /// The ID of the WirelessGatewayTask.
        public let wirelessGatewayTaskDefinitionId: String?

        public init(lastUplinkReceivedAt: String? = nil, status: WirelessGatewayTaskStatus? = nil, taskCreatedAt: String? = nil, wirelessGatewayId: String? = nil, wirelessGatewayTaskDefinitionId: String? = nil) {
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.status = status
            self.taskCreatedAt = taskCreatedAt
            self.wirelessGatewayId = wirelessGatewayId
            self.wirelessGatewayTaskDefinitionId = wirelessGatewayTaskDefinitionId
        }

        private enum CodingKeys: String, CodingKey {
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case status = "Status"
            case taskCreatedAt = "TaskCreatedAt"
            case wirelessGatewayId = "WirelessGatewayId"
            case wirelessGatewayTaskDefinitionId = "WirelessGatewayTaskDefinitionId"
        }
    }

    public struct ListDestinationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListDestinationsResponse: AWSDecodableShape {
        /// The list of destinations.
        public let destinationList: [Destinations]?
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?

        public init(destinationList: [Destinations]? = nil, nextToken: String? = nil) {
            self.destinationList = destinationList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case destinationList = "DestinationList"
            case nextToken = "NextToken"
        }
    }

    public struct ListDeviceProfilesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListDeviceProfilesResponse: AWSDecodableShape {
        /// The list of device profiles.
        public let deviceProfileList: [DeviceProfile]?
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?

        public init(deviceProfileList: [DeviceProfile]? = nil, nextToken: String? = nil) {
            self.deviceProfileList = deviceProfileList
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case deviceProfileList = "DeviceProfileList"
            case nextToken = "NextToken"
        }
    }

    public struct ListPartnerAccountsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPartnerAccountsResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The Sidewalk account credentials.
        public let sidewalk: [SidewalkAccountInfoWithFingerprint]?

        public init(nextToken: String? = nil, sidewalk: [SidewalkAccountInfoWithFingerprint]? = nil) {
            self.nextToken = nextToken
            self.sidewalk = sidewalk
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sidewalk = "Sidewalk"
        }
    }

    public struct ListServiceProfilesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListServiceProfilesResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The list of service profiles.
        public let serviceProfileList: [ServiceProfile]?

        public init(nextToken: String? = nil, serviceProfileList: [ServiceProfile]? = nil) {
            self.nextToken = nextToken
            self.serviceProfileList = serviceProfileList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case serviceProfileList = "ServiceProfileList"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .querystring(locationName: "resourceArn"))
        ]

        /// The ARN of the resource for which to list tags.
        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1011)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        /// The tags attached to the specified resource. Tags are metadata that can be used to manage a resource
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListWirelessDevicesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "destinationName", location: .querystring(locationName: "destinationName")),
            AWSMemberEncoding(label: "deviceProfileId", location: .querystring(locationName: "deviceProfileId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "serviceProfileId", location: .querystring(locationName: "serviceProfileId")),
            AWSMemberEncoding(label: "wirelessDeviceType", location: .querystring(locationName: "wirelessDeviceType"))
        ]

        /// A filter to list only the wireless devices that use this destination.
        public let destinationName: String?
        /// A filter to list only the wireless devices that use this device profile.
        public let deviceProfileId: String?
        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?
        /// A filter to list only the wireless devices that use this service profile.
        public let serviceProfileId: String?
        /// A filter to list only the wireless devices that use this wireless device type.
        public let wirelessDeviceType: WirelessDeviceType?

        public init(destinationName: String? = nil, deviceProfileId: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, serviceProfileId: String? = nil, wirelessDeviceType: WirelessDeviceType? = nil) {
            self.destinationName = destinationName
            self.deviceProfileId = deviceProfileId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.serviceProfileId = serviceProfileId
            self.wirelessDeviceType = wirelessDeviceType
        }

        public func validate(name: String) throws {
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "[a-zA-Z0-9-_]+")
            try self.validate(self.deviceProfileId, name: "deviceProfileId", parent: name, max: 256)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
            try self.validate(self.serviceProfileId, name: "serviceProfileId", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWirelessDevicesResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The ID of the wireless device.
        public let wirelessDeviceList: [WirelessDeviceStatistics]?

        public init(nextToken: String? = nil, wirelessDeviceList: [WirelessDeviceStatistics]? = nil) {
            self.nextToken = nextToken
            self.wirelessDeviceList = wirelessDeviceList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case wirelessDeviceList = "WirelessDeviceList"
        }
    }

    public struct ListWirelessGatewayTaskDefinitionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "taskDefinitionType", location: .querystring(locationName: "taskDefinitionType"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?
        /// A filter to list only the wireless gateway task definitions that use this task definition type.
        public let taskDefinitionType: WirelessGatewayTaskDefinitionType?

        public init(maxResults: Int? = nil, nextToken: String? = nil, taskDefinitionType: WirelessGatewayTaskDefinitionType? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.taskDefinitionType = taskDefinitionType
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWirelessGatewayTaskDefinitionsResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The list of task definitions.
        public let taskDefinitions: [UpdateWirelessGatewayTaskEntry]?

        public init(nextToken: String? = nil, taskDefinitions: [UpdateWirelessGatewayTaskEntry]? = nil) {
            self.nextToken = nextToken
            self.taskDefinitions = taskDefinitions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case taskDefinitions = "TaskDefinitions"
        }
    }

    public struct ListWirelessGatewaysRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The maximum number of results to return in this operation.
        public let maxResults: Int?
        /// To retrieve the next set of results, the nextToken value from a previous response; otherwise null to receive the first set of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 250)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 4096)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWirelessGatewaysResponse: AWSDecodableShape {
        /// The token to use to get the next set of results, or null if there are no additional results.
        public let nextToken: String?
        /// The ID of the wireless gateway.
        public let wirelessGatewayList: [WirelessGatewayStatistics]?

        public init(nextToken: String? = nil, wirelessGatewayList: [WirelessGatewayStatistics]? = nil) {
            self.nextToken = nextToken
            self.wirelessGatewayList = wirelessGatewayList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case wirelessGatewayList = "WirelessGatewayList"
        }
    }

    public struct LoRaWANDevice: AWSEncodableShape & AWSDecodableShape {
        /// LoRaWAN object for create APIs
        public let abpV10X: AbpV10X?
        /// ABP device object for create APIs for v1.1
        public let abpV11: AbpV11?
        /// The DevEUI value.
        public let devEui: String?
        /// The ID of the device profile for the new wireless device.
        public let deviceProfileId: String?
        /// OTAA device object for create APIs for v1.0.x
        public let otaaV10X: OtaaV10X?
        /// OTAA device object for v1.1 for create APIs
        public let otaaV11: OtaaV11?
        /// The ID of the service profile.
        public let serviceProfileId: String?

        public init(abpV10X: AbpV10X? = nil, abpV11: AbpV11? = nil, devEui: String? = nil, deviceProfileId: String? = nil, otaaV10X: OtaaV10X? = nil, otaaV11: OtaaV11? = nil, serviceProfileId: String? = nil) {
            self.abpV10X = abpV10X
            self.abpV11 = abpV11
            self.devEui = devEui
            self.deviceProfileId = deviceProfileId
            self.otaaV10X = otaaV10X
            self.otaaV11 = otaaV11
            self.serviceProfileId = serviceProfileId
        }

        public func validate(name: String) throws {
            try self.abpV10X?.validate(name: "\(name).abpV10X")
            try self.abpV11?.validate(name: "\(name).abpV11")
            try self.validate(self.devEui, name: "devEui", parent: name, pattern: "[a-fA-F0-9]{16}")
            try self.validate(self.deviceProfileId, name: "deviceProfileId", parent: name, max: 256)
            try self.otaaV10X?.validate(name: "\(name).otaaV10X")
            try self.otaaV11?.validate(name: "\(name).otaaV11")
            try self.validate(self.serviceProfileId, name: "serviceProfileId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case abpV10X = "AbpV1_0_x"
            case abpV11 = "AbpV1_1"
            case devEui = "DevEui"
            case deviceProfileId = "DeviceProfileId"
            case otaaV10X = "OtaaV1_0_x"
            case otaaV11 = "OtaaV1_1"
            case serviceProfileId = "ServiceProfileId"
        }
    }

    public struct LoRaWANDeviceMetadata: AWSDecodableShape {
        /// The DataRate value.
        public let dataRate: Int?
        /// The DevEUI value.
        public let devEui: String?
        /// The FPort value.
        public let fPort: Int?
        /// The device's channel frequency in Hz.
        public let frequency: Int?
        /// Information about the gateways accessed by the device.
        public let gateways: [LoRaWANGatewayMetadata]?
        /// The date and time of the metadata.
        public let timestamp: String?

        public init(dataRate: Int? = nil, devEui: String? = nil, fPort: Int? = nil, frequency: Int? = nil, gateways: [LoRaWANGatewayMetadata]? = nil, timestamp: String? = nil) {
            self.dataRate = dataRate
            self.devEui = devEui
            self.fPort = fPort
            self.frequency = frequency
            self.gateways = gateways
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case dataRate = "DataRate"
            case devEui = "DevEui"
            case fPort = "FPort"
            case frequency = "Frequency"
            case gateways = "Gateways"
            case timestamp = "Timestamp"
        }
    }

    public struct LoRaWANDeviceProfile: AWSEncodableShape & AWSDecodableShape {
        /// The ClassBTimeout value.
        public let classBTimeout: Int?
        /// The ClassCTimeout value.
        public let classCTimeout: Int?
        /// The list of values that make up the FactoryPresetFreqs value.
        public let factoryPresetFreqsList: [Int]?
        /// The MAC version (such as OTAA 1.1 or OTAA 1.0.3) to use with this device profile.
        public let macVersion: String?
        /// The MaxDutyCycle value.
        public let maxDutyCycle: Int?
        /// The MaxEIRP value.
        public let maxEirp: Int?
        /// The PingSlotDR value.
        public let pingSlotDr: Int?
        /// The PingSlotFreq value.
        public let pingSlotFreq: Int?
        /// The PingSlotPeriod value.
        public let pingSlotPeriod: Int?
        /// The version of regional parameters.
        public let regParamsRevision: String?
        /// The frequency band (RFRegion) value.
        public let rfRegion: String?
        /// The RXDataRate2 value.
        public let rxDataRate2: Int?
        /// The RXDelay1 value.
        public let rxDelay1: Int?
        /// The RXDROffset1 value.
        public let rxDrOffset1: Int?
        /// The RXFreq2 value.
        public let rxFreq2: Int?
        /// The Supports32BitFCnt value.
        public let supports32BitFCnt: Bool?
        /// The SupportsClassB value.
        public let supportsClassB: Bool?
        /// The SupportsClassC value.
        public let supportsClassC: Bool?
        /// The SupportsJoin value.
        public let supportsJoin: Bool?

        public init(classBTimeout: Int? = nil, classCTimeout: Int? = nil, factoryPresetFreqsList: [Int]? = nil, macVersion: String? = nil, maxDutyCycle: Int? = nil, maxEirp: Int? = nil, pingSlotDr: Int? = nil, pingSlotFreq: Int? = nil, pingSlotPeriod: Int? = nil, regParamsRevision: String? = nil, rfRegion: String? = nil, rxDataRate2: Int? = nil, rxDelay1: Int? = nil, rxDrOffset1: Int? = nil, rxFreq2: Int? = nil, supports32BitFCnt: Bool? = nil, supportsClassB: Bool? = nil, supportsClassC: Bool? = nil, supportsJoin: Bool? = nil) {
            self.classBTimeout = classBTimeout
            self.classCTimeout = classCTimeout
            self.factoryPresetFreqsList = factoryPresetFreqsList
            self.macVersion = macVersion
            self.maxDutyCycle = maxDutyCycle
            self.maxEirp = maxEirp
            self.pingSlotDr = pingSlotDr
            self.pingSlotFreq = pingSlotFreq
            self.pingSlotPeriod = pingSlotPeriod
            self.regParamsRevision = regParamsRevision
            self.rfRegion = rfRegion
            self.rxDataRate2 = rxDataRate2
            self.rxDelay1 = rxDelay1
            self.rxDrOffset1 = rxDrOffset1
            self.rxFreq2 = rxFreq2
            self.supports32BitFCnt = supports32BitFCnt
            self.supportsClassB = supportsClassB
            self.supportsClassC = supportsClassC
            self.supportsJoin = supportsJoin
        }

        public func validate(name: String) throws {
            try self.validate(self.classBTimeout, name: "classBTimeout", parent: name, max: 1000)
            try self.validate(self.classBTimeout, name: "classBTimeout", parent: name, min: 0)
            try self.validate(self.classCTimeout, name: "classCTimeout", parent: name, max: 1000)
            try self.validate(self.classCTimeout, name: "classCTimeout", parent: name, min: 0)
            try self.factoryPresetFreqsList?.forEach {
                try validate($0, name: "factoryPresetFreqsList[]", parent: name, max: 16_700_000)
                try validate($0, name: "factoryPresetFreqsList[]", parent: name, min: 1_000_000)
            }
            try self.validate(self.factoryPresetFreqsList, name: "factoryPresetFreqsList", parent: name, max: 20)
            try self.validate(self.factoryPresetFreqsList, name: "factoryPresetFreqsList", parent: name, min: 0)
            try self.validate(self.macVersion, name: "macVersion", parent: name, max: 64)
            try self.validate(self.maxDutyCycle, name: "maxDutyCycle", parent: name, max: 100)
            try self.validate(self.maxDutyCycle, name: "maxDutyCycle", parent: name, min: 0)
            try self.validate(self.maxEirp, name: "maxEirp", parent: name, max: 15)
            try self.validate(self.maxEirp, name: "maxEirp", parent: name, min: 0)
            try self.validate(self.pingSlotDr, name: "pingSlotDr", parent: name, max: 15)
            try self.validate(self.pingSlotDr, name: "pingSlotDr", parent: name, min: 0)
            try self.validate(self.pingSlotFreq, name: "pingSlotFreq", parent: name, max: 16_700_000)
            try self.validate(self.pingSlotFreq, name: "pingSlotFreq", parent: name, min: 1_000_000)
            try self.validate(self.pingSlotPeriod, name: "pingSlotPeriod", parent: name, max: 4096)
            try self.validate(self.pingSlotPeriod, name: "pingSlotPeriod", parent: name, min: 128)
            try self.validate(self.regParamsRevision, name: "regParamsRevision", parent: name, max: 64)
            try self.validate(self.rfRegion, name: "rfRegion", parent: name, max: 64)
            try self.validate(self.rxDataRate2, name: "rxDataRate2", parent: name, max: 15)
            try self.validate(self.rxDataRate2, name: "rxDataRate2", parent: name, min: 0)
            try self.validate(self.rxDelay1, name: "rxDelay1", parent: name, max: 15)
            try self.validate(self.rxDelay1, name: "rxDelay1", parent: name, min: 0)
            try self.validate(self.rxDrOffset1, name: "rxDrOffset1", parent: name, max: 7)
            try self.validate(self.rxDrOffset1, name: "rxDrOffset1", parent: name, min: 0)
            try self.validate(self.rxFreq2, name: "rxFreq2", parent: name, max: 16_700_000)
            try self.validate(self.rxFreq2, name: "rxFreq2", parent: name, min: 1_000_000)
        }

        private enum CodingKeys: String, CodingKey {
            case classBTimeout = "ClassBTimeout"
            case classCTimeout = "ClassCTimeout"
            case factoryPresetFreqsList = "FactoryPresetFreqsList"
            case macVersion = "MacVersion"
            case maxDutyCycle = "MaxDutyCycle"
            case maxEirp = "MaxEirp"
            case pingSlotDr = "PingSlotDr"
            case pingSlotFreq = "PingSlotFreq"
            case pingSlotPeriod = "PingSlotPeriod"
            case regParamsRevision = "RegParamsRevision"
            case rfRegion = "RfRegion"
            case rxDataRate2 = "RxDataRate2"
            case rxDelay1 = "RxDelay1"
            case rxDrOffset1 = "RxDrOffset1"
            case rxFreq2 = "RxFreq2"
            case supports32BitFCnt = "Supports32BitFCnt"
            case supportsClassB = "SupportsClassB"
            case supportsClassC = "SupportsClassC"
            case supportsJoin = "SupportsJoin"
        }
    }

    public struct LoRaWANGateway: AWSEncodableShape & AWSDecodableShape {
        /// The gateway's EUI value.
        public let gatewayEui: String?
        /// The frequency band (RFRegion) value.
        public let rfRegion: String?

        public init(gatewayEui: String? = nil, rfRegion: String? = nil) {
            self.gatewayEui = gatewayEui
            self.rfRegion = rfRegion
        }

        public func validate(name: String) throws {
            try self.validate(self.gatewayEui, name: "gatewayEui", parent: name, pattern: "^(([0-9A-Fa-f]{2}-){7}|([0-9A-Fa-f]{2}:){7}|([0-9A-Fa-f]{2}\\s){7}|([0-9A-Fa-f]{2}){7})([0-9A-Fa-f]{2})$")
            try self.validate(self.rfRegion, name: "rfRegion", parent: name, max: 64)
        }

        private enum CodingKeys: String, CodingKey {
            case gatewayEui = "GatewayEui"
            case rfRegion = "RfRegion"
        }
    }

    public struct LoRaWANGatewayCurrentVersion: AWSDecodableShape {
        /// The version of the gateways that should receive the update.
        public let currentVersion: LoRaWANGatewayVersion?

        public init(currentVersion: LoRaWANGatewayVersion? = nil) {
            self.currentVersion = currentVersion
        }

        private enum CodingKeys: String, CodingKey {
            case currentVersion = "CurrentVersion"
        }
    }

    public struct LoRaWANGatewayMetadata: AWSDecodableShape {
        /// The gateway's EUI value.
        public let gatewayEui: String?
        /// The RSSI value.
        public let rssi: Double?
        /// The SNR value.
        public let snr: Double?

        public init(gatewayEui: String? = nil, rssi: Double? = nil, snr: Double? = nil) {
            self.gatewayEui = gatewayEui
            self.rssi = rssi
            self.snr = snr
        }

        private enum CodingKeys: String, CodingKey {
            case gatewayEui = "GatewayEui"
            case rssi = "Rssi"
            case snr = "Snr"
        }
    }

    public struct LoRaWANGatewayVersion: AWSEncodableShape & AWSDecodableShape {
        /// The model number of the wireless gateway.
        public let model: String?
        /// The version of the wireless gateway firmware.
        public let packageVersion: String?
        /// The basic station version of the wireless gateway.
        public let station: String?

        public init(model: String? = nil, packageVersion: String? = nil, station: String? = nil) {
            self.model = model
            self.packageVersion = packageVersion
            self.station = station
        }

        public func validate(name: String) throws {
            try self.validate(self.model, name: "model", parent: name, max: 4096)
            try self.validate(self.model, name: "model", parent: name, min: 1)
            try self.validate(self.packageVersion, name: "packageVersion", parent: name, max: 32)
            try self.validate(self.packageVersion, name: "packageVersion", parent: name, min: 1)
            try self.validate(self.station, name: "station", parent: name, max: 4096)
            try self.validate(self.station, name: "station", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case model = "Model"
            case packageVersion = "PackageVersion"
            case station = "Station"
        }
    }

    public struct LoRaWANGetServiceProfileInfo: AWSDecodableShape {
        /// The AddGWMetaData value.
        public let addGwMetadata: Bool?
        /// The ChannelMask value.
        public let channelMask: String?
        /// The DevStatusReqFreq value.
        public let devStatusReqFreq: Int?
        /// The DLBucketSize value.
        public let dlBucketSize: Int?
        /// The DLRate value.
        public let dlRate: Int?
        /// The DLRatePolicy value.
        public let dlRatePolicy: String?
        /// The DRMax value.
        public let drMax: Int?
        /// The DRMin value.
        public let drMin: Int?
        /// The HRAllowed value that describes whether handover roaming is allowed.
        public let hrAllowed: Bool?
        /// The MinGwDiversity value.
        public let minGwDiversity: Int?
        /// The NwkGeoLoc value.
        public let nwkGeoLoc: Bool?
        /// The PRAllowed value that describes whether passive roaming is allowed.
        public let prAllowed: Bool?
        /// The RAAllowed value that describes whether roaming activation is allowed.
        public let raAllowed: Bool?
        /// The ReportDevStatusBattery value.
        public let reportDevStatusBattery: Bool?
        /// The ReportDevStatusMargin value.
        public let reportDevStatusMargin: Bool?
        /// The TargetPER value.
        public let targetPer: Int?
        /// The ULBucketSize value.
        public let ulBucketSize: Int?
        /// The ULRate value.
        public let ulRate: Int?
        /// The ULRatePolicy value.
        public let ulRatePolicy: String?

        public init(addGwMetadata: Bool? = nil, channelMask: String? = nil, devStatusReqFreq: Int? = nil, dlBucketSize: Int? = nil, dlRate: Int? = nil, dlRatePolicy: String? = nil, drMax: Int? = nil, drMin: Int? = nil, hrAllowed: Bool? = nil, minGwDiversity: Int? = nil, nwkGeoLoc: Bool? = nil, prAllowed: Bool? = nil, raAllowed: Bool? = nil, reportDevStatusBattery: Bool? = nil, reportDevStatusMargin: Bool? = nil, targetPer: Int? = nil, ulBucketSize: Int? = nil, ulRate: Int? = nil, ulRatePolicy: String? = nil) {
            self.addGwMetadata = addGwMetadata
            self.channelMask = channelMask
            self.devStatusReqFreq = devStatusReqFreq
            self.dlBucketSize = dlBucketSize
            self.dlRate = dlRate
            self.dlRatePolicy = dlRatePolicy
            self.drMax = drMax
            self.drMin = drMin
            self.hrAllowed = hrAllowed
            self.minGwDiversity = minGwDiversity
            self.nwkGeoLoc = nwkGeoLoc
            self.prAllowed = prAllowed
            self.raAllowed = raAllowed
            self.reportDevStatusBattery = reportDevStatusBattery
            self.reportDevStatusMargin = reportDevStatusMargin
            self.targetPer = targetPer
            self.ulBucketSize = ulBucketSize
            self.ulRate = ulRate
            self.ulRatePolicy = ulRatePolicy
        }

        private enum CodingKeys: String, CodingKey {
            case addGwMetadata = "AddGwMetadata"
            case channelMask = "ChannelMask"
            case devStatusReqFreq = "DevStatusReqFreq"
            case dlBucketSize = "DlBucketSize"
            case dlRate = "DlRate"
            case dlRatePolicy = "DlRatePolicy"
            case drMax = "DrMax"
            case drMin = "DrMin"
            case hrAllowed = "HrAllowed"
            case minGwDiversity = "MinGwDiversity"
            case nwkGeoLoc = "NwkGeoLoc"
            case prAllowed = "PrAllowed"
            case raAllowed = "RaAllowed"
            case reportDevStatusBattery = "ReportDevStatusBattery"
            case reportDevStatusMargin = "ReportDevStatusMargin"
            case targetPer = "TargetPer"
            case ulBucketSize = "UlBucketSize"
            case ulRate = "UlRate"
            case ulRatePolicy = "UlRatePolicy"
        }
    }

    public struct LoRaWANListDevice: AWSDecodableShape {
        /// The DevEUI value.
        public let devEui: String?

        public init(devEui: String? = nil) {
            self.devEui = devEui
        }

        private enum CodingKeys: String, CodingKey {
            case devEui = "DevEui"
        }
    }

    public struct LoRaWANSendDataToDevice: AWSEncodableShape {
        /// The Fport value.
        public let fPort: Int?

        public init(fPort: Int? = nil) {
            self.fPort = fPort
        }

        public func validate(name: String) throws {
            try self.validate(self.fPort, name: "fPort", parent: name, max: 223)
            try self.validate(self.fPort, name: "fPort", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case fPort = "FPort"
        }
    }

    public struct LoRaWANServiceProfile: AWSEncodableShape {
        /// The AddGWMetaData value.
        public let addGwMetadata: Bool?

        public init(addGwMetadata: Bool? = nil) {
            self.addGwMetadata = addGwMetadata
        }

        private enum CodingKeys: String, CodingKey {
            case addGwMetadata = "AddGwMetadata"
        }
    }

    public struct LoRaWANUpdateDevice: AWSEncodableShape {
        /// The ID of the device profile for the wireless device.
        public let deviceProfileId: String?
        /// The ID of the service profile.
        public let serviceProfileId: String?

        public init(deviceProfileId: String? = nil, serviceProfileId: String? = nil) {
            self.deviceProfileId = deviceProfileId
            self.serviceProfileId = serviceProfileId
        }

        public func validate(name: String) throws {
            try self.validate(self.deviceProfileId, name: "deviceProfileId", parent: name, max: 256)
            try self.validate(self.serviceProfileId, name: "serviceProfileId", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case deviceProfileId = "DeviceProfileId"
            case serviceProfileId = "ServiceProfileId"
        }
    }

    public struct LoRaWANUpdateGatewayTaskCreate: AWSEncodableShape & AWSDecodableShape {
        /// The version of the gateways that should receive the update.
        public let currentVersion: LoRaWANGatewayVersion?
        /// The CRC of the signature private key to check.
        public let sigKeyCrc: Int64?
        /// The signature used to verify the update firmware.
        public let updateSignature: String?
        /// The firmware version to update the gateway to.
        public let updateVersion: LoRaWANGatewayVersion?

        public init(currentVersion: LoRaWANGatewayVersion? = nil, sigKeyCrc: Int64? = nil, updateSignature: String? = nil, updateVersion: LoRaWANGatewayVersion? = nil) {
            self.currentVersion = currentVersion
            self.sigKeyCrc = sigKeyCrc
            self.updateSignature = updateSignature
            self.updateVersion = updateVersion
        }

        public func validate(name: String) throws {
            try self.currentVersion?.validate(name: "\(name).currentVersion")
            try self.validate(self.sigKeyCrc, name: "sigKeyCrc", parent: name, max: 4_294_967_295)
            try self.validate(self.sigKeyCrc, name: "sigKeyCrc", parent: name, min: 1)
            try self.validate(self.updateSignature, name: "updateSignature", parent: name, max: 4096)
            try self.validate(self.updateSignature, name: "updateSignature", parent: name, min: 1)
            try self.updateVersion?.validate(name: "\(name).updateVersion")
        }

        private enum CodingKeys: String, CodingKey {
            case currentVersion = "CurrentVersion"
            case sigKeyCrc = "SigKeyCrc"
            case updateSignature = "UpdateSignature"
            case updateVersion = "UpdateVersion"
        }
    }

    public struct LoRaWANUpdateGatewayTaskEntry: AWSDecodableShape {
        /// The version of the gateways that should receive the update.
        public let currentVersion: LoRaWANGatewayVersion?
        /// The firmware version to update the gateway to.
        public let updateVersion: LoRaWANGatewayVersion?

        public init(currentVersion: LoRaWANGatewayVersion? = nil, updateVersion: LoRaWANGatewayVersion? = nil) {
            self.currentVersion = currentVersion
            self.updateVersion = updateVersion
        }

        private enum CodingKeys: String, CodingKey {
            case currentVersion = "CurrentVersion"
            case updateVersion = "UpdateVersion"
        }
    }

    public struct OtaaV10X: AWSEncodableShape & AWSDecodableShape {
        /// The AppEUI value.
        public let appEui: String?
        /// The AppKey value.
        public let appKey: String?

        public init(appEui: String? = nil, appKey: String? = nil) {
            self.appEui = appEui
            self.appKey = appKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appEui, name: "appEui", parent: name, pattern: "[a-fA-F0-9]{16}")
            try self.validate(self.appKey, name: "appKey", parent: name, pattern: "[a-fA-F0-9]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case appEui = "AppEui"
            case appKey = "AppKey"
        }
    }

    public struct OtaaV11: AWSEncodableShape & AWSDecodableShape {
        /// The AppKey value.
        public let appKey: String?
        /// The JoinEUI value.
        public let joinEui: String?
        /// The NwkKey value.
        public let nwkKey: String?

        public init(appKey: String? = nil, joinEui: String? = nil, nwkKey: String? = nil) {
            self.appKey = appKey
            self.joinEui = joinEui
            self.nwkKey = nwkKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appKey, name: "appKey", parent: name, pattern: "[a-fA-F0-9]{32}")
            try self.validate(self.joinEui, name: "joinEui", parent: name, pattern: "[a-fA-F0-9]{16}")
            try self.validate(self.nwkKey, name: "nwkKey", parent: name, pattern: "[a-fA-F0-9]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case appKey = "AppKey"
            case joinEui = "JoinEui"
            case nwkKey = "NwkKey"
        }
    }

    public struct SendDataToWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the wireless device to receive the data.
        public let id: String
        /// The message payload to send.
        public let payloadData: String
        /// The transmit mode to use to send data to the wireless device. Can be: 0 for UM (unacknowledge mode) or 1 for AM (acknowledge mode).
        public let transmitMode: Int
        /// Metadata about the message request.
        public let wirelessMetadata: WirelessMetadata?

        public init(id: String, payloadData: String, transmitMode: Int, wirelessMetadata: WirelessMetadata? = nil) {
            self.id = id
            self.payloadData = payloadData
            self.transmitMode = transmitMode
            self.wirelessMetadata = wirelessMetadata
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.payloadData, name: "payloadData", parent: name, max: 2048)
            try self.validate(self.payloadData, name: "payloadData", parent: name, pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$")
            try self.validate(self.transmitMode, name: "transmitMode", parent: name, max: 1)
            try self.validate(self.transmitMode, name: "transmitMode", parent: name, min: 0)
            try self.wirelessMetadata?.validate(name: "\(name).wirelessMetadata")
        }

        private enum CodingKeys: String, CodingKey {
            case payloadData = "PayloadData"
            case transmitMode = "TransmitMode"
            case wirelessMetadata = "WirelessMetadata"
        }
    }

    public struct SendDataToWirelessDeviceResponse: AWSDecodableShape {
        /// The ID of the message sent to the wireless device.
        public let messageId: String?

        public init(messageId: String? = nil) {
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case messageId = "MessageId"
        }
    }

    public struct ServiceProfile: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The ID of the service profile.
        public let id: String?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, id: String? = nil, name: String? = nil) {
            self.arn = arn
            self.id = id
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case id = "Id"
            case name = "Name"
        }
    }

    public struct SessionKeysAbpV10X: AWSEncodableShape & AWSDecodableShape {
        /// The AppSKey value.
        public let appSKey: String?
        /// The NwkSKey value.
        public let nwkSKey: String?

        public init(appSKey: String? = nil, nwkSKey: String? = nil) {
            self.appSKey = appSKey
            self.nwkSKey = nwkSKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appSKey, name: "appSKey", parent: name, pattern: "[a-fA-F0-9]{32}")
            try self.validate(self.nwkSKey, name: "nwkSKey", parent: name, pattern: "[a-fA-F0-9]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case appSKey = "AppSKey"
            case nwkSKey = "NwkSKey"
        }
    }

    public struct SessionKeysAbpV11: AWSEncodableShape & AWSDecodableShape {
        /// The AppSKey value.
        public let appSKey: String?
        /// The FNwkSIntKey value.
        public let fNwkSIntKey: String?
        /// The NwkSEncKey value.
        public let nwkSEncKey: String?
        /// The SNwkSIntKey value.
        public let sNwkSIntKey: String?

        public init(appSKey: String? = nil, fNwkSIntKey: String? = nil, nwkSEncKey: String? = nil, sNwkSIntKey: String? = nil) {
            self.appSKey = appSKey
            self.fNwkSIntKey = fNwkSIntKey
            self.nwkSEncKey = nwkSEncKey
            self.sNwkSIntKey = sNwkSIntKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appSKey, name: "appSKey", parent: name, pattern: "[a-fA-F0-9]{32}")
            try self.validate(self.fNwkSIntKey, name: "fNwkSIntKey", parent: name, pattern: "[a-fA-F0-9]{32}")
            try self.validate(self.nwkSEncKey, name: "nwkSEncKey", parent: name, pattern: "[a-fA-F0-9]{32}")
            try self.validate(self.sNwkSIntKey, name: "sNwkSIntKey", parent: name, pattern: "[a-fA-F0-9]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case appSKey = "AppSKey"
            case fNwkSIntKey = "FNwkSIntKey"
            case nwkSEncKey = "NwkSEncKey"
            case sNwkSIntKey = "SNwkSIntKey"
        }
    }

    public struct SidewalkAccountInfo: AWSEncodableShape & AWSDecodableShape {
        /// The Sidewalk Amazon ID.
        public let amazonId: String?
        /// The Sidewalk application server private key.
        public let appServerPrivateKey: String?

        public init(amazonId: String? = nil, appServerPrivateKey: String? = nil) {
            self.amazonId = amazonId
            self.appServerPrivateKey = appServerPrivateKey
        }

        public func validate(name: String) throws {
            try self.validate(self.amazonId, name: "amazonId", parent: name, max: 2048)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, max: 4096)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, min: 1)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, pattern: "[a-fA-F0-9]{64}")
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
            case appServerPrivateKey = "AppServerPrivateKey"
        }
    }

    public struct SidewalkAccountInfoWithFingerprint: AWSDecodableShape {
        /// The Sidewalk Amazon ID.
        public let amazonId: String?
        /// The fingerprint of the Sidewalk application server private key.
        public let fingerprint: String?

        public init(amazonId: String? = nil, fingerprint: String? = nil) {
            self.amazonId = amazonId
            self.fingerprint = fingerprint
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
            case fingerprint = "Fingerprint"
        }
    }

    public struct SidewalkListDevice: AWSDecodableShape {
        /// The Sidewalk Amazon ID.
        public let amazonId: String?

        public init(amazonId: String? = nil) {
            self.amazonId = amazonId
        }

        private enum CodingKeys: String, CodingKey {
            case amazonId = "AmazonId"
        }
    }

    public struct SidewalkSendDataToDevice: AWSEncodableShape {
        /// The sequence number.
        public let seq: Int?

        public init(seq: Int? = nil) {
            self.seq = seq
        }

        public func validate(name: String) throws {
            try self.validate(self.seq, name: "seq", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case seq = "Seq"
        }
    }

    public struct SidewalkUpdateAccount: AWSEncodableShape {
        /// The new Sidewalk application server private key.
        public let appServerPrivateKey: String?

        public init(appServerPrivateKey: String? = nil) {
            self.appServerPrivateKey = appServerPrivateKey
        }

        public func validate(name: String) throws {
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, max: 4096)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, min: 1)
            try self.validate(self.appServerPrivateKey, name: "appServerPrivateKey", parent: name, pattern: "[a-fA-F0-9]{64}")
        }

        private enum CodingKeys: String, CodingKey {
            case appServerPrivateKey = "AppServerPrivateKey"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The tag's key value.
        public let key: String
        /// The tag's value.
        public let value: String

        public init(key: String, value: String) {
            self.key = key
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.key, name: "key", parent: name, max: 128)
            try self.validate(self.key, name: "key", parent: name, min: 1)
            try self.validate(self.value, name: "value", parent: name, max: 256)
            try self.validate(self.value, name: "value", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .querystring(locationName: "resourceArn"))
        ]

        /// The ARN of the resource to add tags to.
        public let resourceArn: String
        /// Adds to or modifies the tags of the given resource. Tags are metadata that can be used to manage a resource.
        public let tags: [Tag]

        public init(resourceArn: String, tags: [Tag]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1011)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.tags, name: "tags", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct TestWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// The ID of the wireless device to test.
        public let id: String

        public init(id: String) {
            self.id = id
        }

        public func validate(name: String) throws {
            try self.validate(self.id, name: "id", parent: name, max: 256)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct TestWirelessDeviceResponse: AWSDecodableShape {
        /// The result returned by the test.
        public let result: String?

        public init(result: String? = nil) {
            self.result = result
        }

        private enum CodingKeys: String, CodingKey {
            case result = "Result"
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .querystring(locationName: "resourceArn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring(locationName: "tagKeys"))
        ]

        /// The ARN of the resource to remove tags from.
        public let resourceArn: String
        /// A list of the keys of the tags to remove from the resource.
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1011)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 200)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 0)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UntagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateDestinationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "name", location: .uri(locationName: "Name"))
        ]

        /// A new description of the resource.
        public let description: String?
        /// The new rule name or topic rule to send messages to.
        public let expression: String?
        /// The type of value in Expression.
        public let expressionType: ExpressionType?
        /// The new name of the resource.
        public let name: String
        /// The ARN of the IAM Role that authorizes the destination.
        public let roleArn: String?

        public init(description: String? = nil, expression: String? = nil, expressionType: ExpressionType? = nil, name: String, roleArn: String? = nil) {
            self.description = description
            self.expression = expression
            self.expressionType = expressionType
            self.name = name
            self.roleArn = roleArn
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.expression, name: "expression", parent: name, max: 2048)
            try self.validate(self.name, name: "name", parent: name, max: 128)
            try self.validate(self.name, name: "name", parent: name, pattern: "[a-zA-Z0-9-_]+")
            try self.validate(self.roleArn, name: "roleArn", parent: name, max: 2048)
            try self.validate(self.roleArn, name: "roleArn", parent: name, min: 20)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case expression = "Expression"
            case expressionType = "ExpressionType"
            case roleArn = "RoleArn"
        }
    }

    public struct UpdateDestinationResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdatePartnerAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "partnerAccountId", location: .uri(locationName: "PartnerAccountId")),
            AWSMemberEncoding(label: "partnerType", location: .querystring(locationName: "partnerType"))
        ]

        /// The ID of the partner account to update.
        public let partnerAccountId: String
        /// The partner type.
        public let partnerType: PartnerType
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkUpdateAccount

        public init(partnerAccountId: String, partnerType: PartnerType, sidewalk: SidewalkUpdateAccount) {
            self.partnerAccountId = partnerAccountId
            self.partnerType = partnerType
            self.sidewalk = sidewalk
        }

        public func validate(name: String) throws {
            try self.validate(self.partnerAccountId, name: "partnerAccountId", parent: name, max: 256)
            try self.sidewalk.validate(name: "\(name).sidewalk")
        }

        private enum CodingKeys: String, CodingKey {
            case sidewalk = "Sidewalk"
        }
    }

    public struct UpdatePartnerAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWirelessDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// A new description of the resource.
        public let description: String?
        /// The name of the new destination for the device.
        public let destinationName: String?
        /// The ID of the resource to update.
        public let id: String
        /// The updated wireless device's configuration.
        public let loRaWAN: LoRaWANUpdateDevice?
        /// The new name of the resource.
        public let name: String?

        public init(description: String? = nil, destinationName: String? = nil, id: String, loRaWAN: LoRaWANUpdateDevice? = nil, name: String? = nil) {
            self.description = description
            self.destinationName = destinationName
            self.id = id
            self.loRaWAN = loRaWAN
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.destinationName, name: "destinationName", parent: name, max: 128)
            try self.validate(self.destinationName, name: "destinationName", parent: name, pattern: "[a-zA-Z0-9-_]+")
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.name, name: "name", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case destinationName = "DestinationName"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct UpdateWirelessDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWirelessGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "id", location: .uri(locationName: "Id"))
        ]

        /// A new description of the resource.
        public let description: String?
        /// The ID of the resource to update.
        public let id: String
        /// The new name of the resource.
        public let name: String?

        public init(description: String? = nil, id: String, name: String? = nil) {
            self.description = description
            self.id = id
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 2048)
            try self.validate(self.id, name: "id", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case name = "Name"
        }
    }

    public struct UpdateWirelessGatewayResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWirelessGatewayTaskCreate: AWSEncodableShape & AWSDecodableShape {
        /// The properties that relate to the LoRaWAN wireless gateway.
        public let loRaWAN: LoRaWANUpdateGatewayTaskCreate?
        /// The IAM role used to read data from the S3 bucket.
        public let updateDataRole: String?
        /// The link to the S3 bucket.
        public let updateDataSource: String?

        public init(loRaWAN: LoRaWANUpdateGatewayTaskCreate? = nil, updateDataRole: String? = nil, updateDataSource: String? = nil) {
            self.loRaWAN = loRaWAN
            self.updateDataRole = updateDataRole
            self.updateDataSource = updateDataSource
        }

        public func validate(name: String) throws {
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.validate(self.updateDataRole, name: "updateDataRole", parent: name, max: 4096)
            try self.validate(self.updateDataRole, name: "updateDataRole", parent: name, min: 1)
            try self.validate(self.updateDataSource, name: "updateDataSource", parent: name, max: 4096)
            try self.validate(self.updateDataSource, name: "updateDataSource", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case updateDataRole = "UpdateDataRole"
            case updateDataSource = "UpdateDataSource"
        }
    }

    public struct UpdateWirelessGatewayTaskEntry: AWSDecodableShape {
        /// The ID of the new wireless gateway task entry.
        public let id: String?
        /// The properties that relate to the LoRaWAN wireless gateway.
        public let loRaWAN: LoRaWANUpdateGatewayTaskEntry?

        public init(id: String? = nil, loRaWAN: LoRaWANUpdateGatewayTaskEntry? = nil) {
            self.id = id
            self.loRaWAN = loRaWAN
        }

        private enum CodingKeys: String, CodingKey {
            case id = "Id"
            case loRaWAN = "LoRaWAN"
        }
    }

    public struct WirelessDeviceStatistics: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The name of the destination to which the device is assigned.
        public let destinationName: String?
        /// The ID of the wireless device reporting the data.
        public let id: String?
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// LoRaWAN device info.
        public let loRaWAN: LoRaWANListDevice?
        /// The name of the resource.
        public let name: String?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkListDevice?
        /// The wireless device type.
        public let type: WirelessDeviceType?

        public init(arn: String? = nil, destinationName: String? = nil, id: String? = nil, lastUplinkReceivedAt: String? = nil, loRaWAN: LoRaWANListDevice? = nil, name: String? = nil, sidewalk: SidewalkListDevice? = nil, type: WirelessDeviceType? = nil) {
            self.arn = arn
            self.destinationName = destinationName
            self.id = id
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.loRaWAN = loRaWAN
            self.name = name
            self.sidewalk = sidewalk
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case destinationName = "DestinationName"
            case id = "Id"
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
            case sidewalk = "Sidewalk"
            case type = "Type"
        }
    }

    public struct WirelessGatewayStatistics: AWSDecodableShape {
        /// The Amazon Resource Name of the resource.
        public let arn: String?
        /// The description of the resource.
        public let description: String?
        /// The ID of the wireless gateway reporting the data.
        public let id: String?
        /// The date and time when the most recent uplink was received.
        public let lastUplinkReceivedAt: String?
        /// LoRaWAN gateway info.
        public let loRaWAN: LoRaWANGateway?
        /// The name of the resource.
        public let name: String?

        public init(arn: String? = nil, description: String? = nil, id: String? = nil, lastUplinkReceivedAt: String? = nil, loRaWAN: LoRaWANGateway? = nil, name: String? = nil) {
            self.arn = arn
            self.description = description
            self.id = id
            self.lastUplinkReceivedAt = lastUplinkReceivedAt
            self.loRaWAN = loRaWAN
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case description = "Description"
            case id = "Id"
            case lastUplinkReceivedAt = "LastUplinkReceivedAt"
            case loRaWAN = "LoRaWAN"
            case name = "Name"
        }
    }

    public struct WirelessMetadata: AWSEncodableShape {
        /// LoRaWAN device info.
        public let loRaWAN: LoRaWANSendDataToDevice?
        /// The Sidewalk account credentials.
        public let sidewalk: SidewalkSendDataToDevice?

        public init(loRaWAN: LoRaWANSendDataToDevice? = nil, sidewalk: SidewalkSendDataToDevice? = nil) {
            self.loRaWAN = loRaWAN
            self.sidewalk = sidewalk
        }

        public func validate(name: String) throws {
            try self.loRaWAN?.validate(name: "\(name).loRaWAN")
            try self.sidewalk?.validate(name: "\(name).sidewalk")
        }

        private enum CodingKeys: String, CodingKey {
            case loRaWAN = "LoRaWAN"
            case sidewalk = "Sidewalk"
        }
    }
}
